

package jumavidesktop.GUI.Mantenimientos.Camaras.Vistas;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.LinkedList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import jumavidesktop.GUI.Mantenimientos.Camaras.Controlador.ControladorCamaras;
import jumavidesktop.GUI.Mantenimientos.Mantenimiento;
import jumavidesktop.GUI.Mantenimientos.interfaz.IMantenimiento;
import jumavidesktop.GUI.mensajeModal.MensajeInfoError;
import jumavidesktop.Manejadores.Intefaces.INotificadoContrCam;
import jumavidesktop.Manejadores.Intefaces.ISubjectContrCam;
import jumavidesktop.Otros.Pojos.MyRespuesta;
import jumavidesktop.Persistencia.entidades.Camara;

/**
 *
 * @author vimso
 */
public class MantenimientoCamaras extends Mantenimiento implements ISubjectContrCam{
    
    LinkedList<INotificadoContrCam> notificadores = new LinkedList<>();
    IMantenimiento<Camara> manteni= new ControladorCamaras();
    PanelCamara pnCamara;
    JPanel pnPadre;
    
    public MantenimientoCamaras(JFrame padre) {
        super("Mantenimiento de cámaras");
        this.setPadre(padre);
        //añado el panel
        pnCamara = new PanelCamara();
        Dimension sizeForm=new Dimension(((Double) (this.pnCamara.getPreferredSize().getWidth())).intValue(), ((Double) (this.pnCamara.getPreferredSize().getHeight() + this.getjToolBar1().getPreferredSize().getHeight())).intValue());
        
        this.setResizable(false);
        this.setSize(sizeForm);
        this.setPreferredSize(sizeForm);
        pnPadre = super.getPnPadre();
        pnPadre.setPreferredSize(pnCamara.getPreferredSize());
        pnCamara.setSize(pnCamara.getPreferredSize());
        pnPadre.setSize(pnCamara.getPreferredSize());
        pnPadre.setLayout(new BorderLayout());
        pnPadre.add(pnCamara,BorderLayout.CENTER);
        //pnPadre.setLayout(new BorderLayout());
        //pnPadre.add(pnCamara,BorderLayout.CENTER);
        pnPadre.setVisible(true); 
        super.setSize(new Dimension(620,720));
        super.myPostContructor();
        
    }

    @Override
    public MyRespuesta accGuardar() {
        
        boolean centinela=manteni.isCreandoEntidad();
        
        MyRespuesta resp = pnCamara.puedeGuardar();
        if (!resp.getTodoOK()) {
            MensajeInfoError msg= new MensajeInfoError(this.getPadre(), true, resp.getMensajes(), MensajeInfoError.TipoMensaje.ERROR, "No se puede guardar la cámara");
            return resp;
        }
        
        
        
        resp.agregarMyRespuesta(manteni.guardar(pnCamara.getEntidadPanel()));
        if (resp.getTodoOK()) {
            this.repintar();
            //agrego cámara al controlador de cámaras principal.
            if (centinela) {
                notificarObservadores(pnCamara.getEntidadPanel(), true);
            }
        }
        return resp;
    }

    @Override
    public void accNuevo() {
        this.manteni.setEntidadActual(new Camara());
        limpiarControles();
    }

    @Override
    public void accCancelar() {
        this.pnPadre.removeAll();
        this.pnPadre.add(pnCamara,BorderLayout.CENTER);
        this.repintar();
    }

    @Override
    public MyRespuesta accEliminar() {
        MyRespuesta resp = manteni.eliminar(this.manteni.getEntidadActual());
       
        //elimino cámara del controlador principal.
        notificarObservadores(this.manteni.getEntidadActual(),false);
        return resp;
    }

    @Override
    public void accBuscar() {
        
        //Mostrare un mensaje diciendo que esta accion no esta disponible
        // o simplemente quitare en el contructor el botón de busqueda
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void limpiarControles() {
        this.pnCamara.borrarTodo();
    }
   
    @Override
    public void accComboBox(String valor) {
           this.manteni.campoBusqueda(valor);
    }

    @Override
    public void repintar() {
        if(manteni.getEntidadActual()!=null){
            pnCamara.actualizarPanel(manteni.getEntidadActual());
        }
        else
        {
            this.limpiarControles();
        }
        this.updateUI();
    }

    @Override
    public IMantenimiento getControlador() {
        return this.manteni;
    }

    @Override
    public void attach(INotificadoContrCam cont) {
        notificadores.add(cont);
    }

    @Override
    public void dettach(INotificadoContrCam cont) {
        notificadores.remove(cont);
    }

    @Override
    public void notificarObservadores(Camara cam, boolean llave) {
        for (INotificadoContrCam item : notificadores) {
            item.updateCam(cam, llave);
        }    
    }
}
